@@ -4,7 +4,9 @@ from __future__ import division |
||
4 | 4 |
|
5 | 5 |
from django.db.models import Q |
6 | 6 |
from django_logit import logit |
7 |
+from django_query import get_query_value |
|
7 | 8 |
from django_response import response |
9 |
+from paginator import pagination |
|
8 | 10 |
from TimeConvert import TimeConvert as tc |
9 | 11 |
|
10 | 12 |
from equipment.models import (IsolationPointInfo, ThermometerEquipmentInfo, ThermometerMeasureInfo, |
@@ -17,11 +19,16 @@ def eqpt_bind(request): |
||
17 | 19 |
point_id = request.POST.get('point_id', '') |
18 | 20 |
macid = request.POST.get('macid', '') |
19 | 21 |
sn = request.POST.get('sn', '') |
22 |
+ macidsns = get_query_value(request, 'macidsns', val_cast_type='listjson') |
|
20 | 23 |
|
21 |
- ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={ |
|
22 |
- 'point_id': point_id, |
|
23 |
- 'sn': sn, |
|
24 |
- }) |
|
24 |
+ macidsns = macidsns or [{'macid': macid, 'sn': sn}] |
|
25 |
+ |
|
26 |
+ for macidsn in macidsns: |
|
27 |
+ macid, sn = macidsn.get('macid'), macidsn.get('sn') |
|
28 |
+ ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={ |
|
29 |
+ 'point_id': point_id, |
|
30 |
+ 'sn': sn, |
|
31 |
+ }) |
|
25 | 32 |
|
26 | 33 |
return response() |
27 | 34 |
|
@@ -43,17 +50,22 @@ def eqpt_onoff(request): |
||
43 | 50 |
def eqpt_list(request): |
44 | 51 |
point_id = request.POST.get('point_id', '') |
45 | 52 |
macid = request.POST.get('macid', '') |
53 |
+ page = request.POST.get('page', 1) |
|
54 |
+ num = request.POST.get('num', 20) |
|
46 | 55 |
|
47 | 56 |
eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point_id, status=True) |
48 | 57 |
if macid: |
49 | 58 |
eqpts = eqpts.filter(macid=macid) |
50 |
- eqpts = [eqpt.data for eqpt in eqpts] |
|
51 | 59 |
|
52 |
- total_num = len(eqpts) |
|
53 |
- active_num = len([1 for eqpt in eqpts if eqpt.get('active_status') == ThermometerEquipmentInfo.ONLINE]) |
|
60 |
+ total_num = eqpts.count() |
|
61 |
+ active_num = eqpts.filter(active_status=ThermometerEquipmentInfo.ONLINE).count() |
|
62 |
+ |
|
63 |
+ eqpts, left = pagination(eqpts, page, num) |
|
64 |
+ eqpts = [eqpt.data for eqpt in eqpts] |
|
54 | 65 |
|
55 | 66 |
return response(data={ |
56 | 67 |
'eqpts': eqpts, |
68 |
+ 'left': left, |
|
57 | 69 |
'total_num': total_num, |
58 | 70 |
'active_num': active_num, |
59 | 71 |
'unactive_num': total_num - active_num, |
@@ -64,21 +76,42 @@ def eqpt_list(request): |
||
64 | 76 |
def eqpt_result(request): |
65 | 77 |
point_id = request.POST.get('point_id', '') |
66 | 78 |
kw = request.POST.get('kw', '') |
79 |
+ page = request.POST.get('page', 1) |
|
80 |
+ num = request.POST.get('num', 20) |
|
67 | 81 |
|
68 | 82 |
try: |
69 | 83 |
point = IsolationPointInfo.objects.get(point_id=point_id, status=True) |
70 | 84 |
except IsolationPointInfo.DoesNotExist: |
71 | 85 |
return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND) |
72 | 86 |
|
73 |
- logs = ThermometerMeasureInfo.objects.filter(point_id=point_id, point_measure_ymd=tc.local_string(format='%Y-%m-%d'), point_measure_window=point.point_measure_window, status=True).order_by('-pk') |
|
74 |
- |
|
75 | 87 |
eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point_id, active_status=ThermometerEquipmentInfo.ONLINE, status=True) |
88 |
+ macids = eqpts.values_list('macid', flat=True) |
|
89 |
+ |
|
90 |
+ logs = ThermometerMeasureInfo.objects.filter( |
|
91 |
+ point_id=point_id, |
|
92 |
+ point_measure_ymd=tc.local_string(format='%Y-%m-%d'), |
|
93 |
+ point_measure_window=point.point_measure_window, |
|
94 |
+ macid__in=macids, |
|
95 |
+ status=True, |
|
96 |
+ ).values('macid', 'temperature') |
|
97 |
+ logs = {log.get('macid'): log.get('temperature') for log in logs} |
|
98 |
+ |
|
99 |
+ total_active_eqpt_num = eqpts.count() |
|
100 |
+ has_upload_temperature_num = len(logs) |
|
101 |
+ temperature_over_375 = len([1 for temperature in logs.values() if temperature > 37.5]) |
|
102 |
+ |
|
76 | 103 |
if kw: |
77 | 104 |
eqpts = eqpts.filter(Q(name__icontains=kw) | Q(phone__icontains=kw)) |
78 |
- eqpts = [eqpt.data for eqpt in eqpts] |
|
105 |
+ eqpts, left = pagination(eqpts, page, num) |
|
106 |
+ eqpts = [{**eqpt.data, **{'has_upload': eqpt.macid in logs, 'temperature': logs.get(eqpt.macid, 0)}} for eqpt in eqpts] |
|
79 | 107 |
|
80 | 108 |
return response(data={ |
81 | 109 |
'eqpts': eqpts, |
110 |
+ 'left': left, |
|
111 |
+ 'total_active_eqpt_num': total_active_eqpt_num, |
|
112 |
+ 'has_upload_temperature_num': has_upload_temperature_num, |
|
113 |
+ 'not_upload_temperature_num': total_active_eqpt_num - has_upload_temperature_num, |
|
114 |
+ 'temperature_over_375': temperature_over_375, |
|
82 | 115 |
}) |
83 | 116 |
|
84 | 117 |
|
@@ -37,7 +37,7 @@ class IsolationPointInfo(BaseModelMixin): |
||
37 | 37 |
start_t, end_t = window.get('start'), window.get('end') |
38 | 38 |
start_dt = tc.string_to_utc_datetime(f'{current_ymd} {start_t}:00') |
39 | 39 |
end_dt = tc.string_to_utc_datetime(f'{current_ymd} {end_t}:00') |
40 |
- if start_dt < current_dt < end_dt: |
|
40 |
+ if tc.utc_datetime(start_dt, minutes=-30) < current_dt < tc.utc_datetime(end_dt, minutes=30): |
|
41 | 41 |
return f'{start_t}-{end_t}' |
42 | 42 |
return '' |
43 | 43 |
|